
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using ADL;
    using ADL.ComprasTableAdapters;
    using AEL.COM;
    using BEL;
using System;
    
    namespace CEL.COM
    {
    /// <summary>
    /// Acceso a la base de datos
    /// Modulo:Compras ta
    /// Tabla:Com_Proveedor_Contacto
    /// </summary>
    public class DO_Com_Proveedor_Contacto
    {
    #region Adapter
    private Com_Proveedor_ContactoTableAdapter _Adapter;
    /// <summary>
    /// Acceso al Table Adapter de la capa ADL
    /// </summary>
    public Com_Proveedor_ContactoTableAdapter Adapter
    {
    get
    {
    if (_Adapter == null)
    _Adapter = new Com_Proveedor_ContactoTableAdapter();
     return _Adapter;
     }
     }
    #endregion
    #region Obtención de datos
    //Obtencion de datos
    /// <summary>
    /// Obtiene todos los datos de la tabla Com_Proveedor_Contacto
    /// </summary> 
    /// <returns>Lista de objetos Com_Proveedor_Contacto</returns> 
    public List <Com_Proveedor_Contacto> Get ( Scope s )
    {
    string llamada = "";
    List <Com_Proveedor_Contacto> lista= new List <Com_Proveedor_Contacto> ();
    //Extrae los datos
    if(s != null)
    {
    Compras.Com_Proveedor_ContactoDataTable tabla = 
    Adapter.Get (s.Ver_Version_Id);
    //Cuenta  el número  de registros de la tabla
    int numeroRegistros = tabla.Count;
    llamada = "Nombre del Método Utilizado: Get "  + "Parametros  Enviados en el Método: s "  + " Nombre del Store Procedure: " + " Com_Proveedor_Contacto_Get "+ " Número de Registros: " + numeroRegistros;
    //Carga en la lista
      foreach (Compras.Com_Proveedor_ContactoRow fila in tabla)
      lista.Add(new Com_Proveedor_Contacto(
      
    fila.Id,
    fila.Codigo,
    fila.Nombre,
    fila.Estado,
    fila.Com_Proveedor_Id,
    fila.Localidad,
    fila.Puesto,
    fila.Direccion,
    fila.Telefonos,
    fila.Fax,
    fila.Correo,
    fila.Descripcion,
    fila.Com_Proveedor_Codigo,
    fila.Par_Razon_Social_Id,
    fila.Par_Razon_Social_Nombre,
    fila.Par_Razon_Social_Numero,
    fila.Par_Razon_Social_Nombre_Comercial,
    fila.Par_Tipo_Identificacion_Id,
    fila.Par_Tipo_Identificacion_Codigo,
    fila.Par_Tipo_Identificacion_Nombre,
    fila.Int_Sucursal_Id,
    fila.Int_Sucursal_Codigo,
    fila.Int_Sucursal_Nombre,
    fila.Creacion_Per_Personal_Id,
    fila.Creacion_Per_Personal_Codigo,
    fila.Creacion_Per_Personal_Nombre,
    fila.Update_Per_Personal_Id,
    fila.Update_Per_Personal_Codigo,
    fila.Update_Per_Personal_Nombre,
    fila.Estado_Nombre));
      }
      //Devuleve la Lista
      return lista;
      }
      public List <Com_Proveedor_Contacto> GetByCodigo( Scope s , string Codigo)
          {
          string llamada = "";
          List <Com_Proveedor_Contacto> lista= new List <Com_Proveedor_Contacto> ();
          //Extrae los datos
          if(s != null)
          {
          Compras.Com_Proveedor_ContactoDataTable tabla = 
          Adapter.GetByCodigo(s.Ver_Version_Id, Codigo);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetByCodigo" + " Parametros  Enviados en el Método: "+ "," + " s.Ver_Version_Id : " + s.Ver_Version_Id+ "," + " Codigo : " + Codigo  + " Nombre del Store Procedure: " + "dbo.Com_Proveedor_Contacto_ByCodigo " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Compras.Com_Proveedor_ContactoRow fila in tabla)
          lista.Add(new Com_Proveedor_Contacto(
          
    fila.Id,
    fila.Codigo,
    fila.Nombre,
    fila.Estado,
    fila.Com_Proveedor_Id,
    fila.Localidad,
    fila.Puesto,
    fila.Direccion,
    fila.Telefonos,
    fila.Fax,
    fila.Correo,
    fila.Descripcion,
    fila.Com_Proveedor_Codigo,
    fila.Par_Razon_Social_Id,
    fila.Par_Razon_Social_Nombre,
    fila.Par_Razon_Social_Numero,
    fila.Par_Razon_Social_Nombre_Comercial,
    fila.Par_Tipo_Identificacion_Id,
    fila.Par_Tipo_Identificacion_Codigo,
    fila.Par_Tipo_Identificacion_Nombre,
    fila.Int_Sucursal_Id,
    fila.Int_Sucursal_Codigo,
    fila.Int_Sucursal_Nombre,
    fila.Creacion_Per_Personal_Id,
    fila.Creacion_Per_Personal_Codigo,
    fila.Creacion_Per_Personal_Nombre,
    fila.Update_Per_Personal_Id,
    fila.Update_Per_Personal_Codigo,
    fila.Update_Per_Personal_Nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
          public List <Com_Proveedor_Contacto> GetById( Scope s , string Id)
          {
          string llamada = "";
          List <Com_Proveedor_Contacto> lista= new List <Com_Proveedor_Contacto> ();
          //Extrae los datos
          if(s != null)
          {
          Compras.Com_Proveedor_ContactoDataTable tabla = 
          Adapter.GetById(s.Ver_Version_Id, Id);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetById" + " Parametros  Enviados en el Método: "+ "," + " s.Ver_Version_Id : " + s.Ver_Version_Id+ "," + " Id : " + Id  + " Nombre del Store Procedure: " + "dbo.Com_Proveedor_Contacto_ById " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Compras.Com_Proveedor_ContactoRow fila in tabla)
          lista.Add(new Com_Proveedor_Contacto(
          
    fila.Id,
    fila.Codigo,
    fila.Nombre,
    fila.Estado,
    fila.Com_Proveedor_Id,
    fila.Localidad,
    fila.Puesto,
    fila.Direccion,
    fila.Telefonos,
    fila.Fax,
    fila.Correo,
    fila.Descripcion,
    fila.Com_Proveedor_Codigo,
    fila.Par_Razon_Social_Id,
    fila.Par_Razon_Social_Nombre,
    fila.Par_Razon_Social_Numero,
    fila.Par_Razon_Social_Nombre_Comercial,
    fila.Par_Tipo_Identificacion_Id,
    fila.Par_Tipo_Identificacion_Codigo,
    fila.Par_Tipo_Identificacion_Nombre,
    fila.Int_Sucursal_Id,
    fila.Int_Sucursal_Codigo,
    fila.Int_Sucursal_Nombre,
    fila.Creacion_Per_Personal_Id,
    fila.Creacion_Per_Personal_Codigo,
    fila.Creacion_Per_Personal_Nombre,
    fila.Update_Per_Personal_Id,
    fila.Update_Per_Personal_Codigo,
    fila.Update_Per_Personal_Nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
        public List <Com_Proveedor_Contacto> GetByProveedor( Scope s , string Com_Proveedor_Id)
          {
          string llamada = "";
          List <Com_Proveedor_Contacto> lista= new List <Com_Proveedor_Contacto> ();
          //Extrae los datos
          if(s != null)
          {
          Compras.Com_Proveedor_ContactoDataTable tabla = 
          Adapter.GetByProveedor(s.Ver_Version_Id, Com_Proveedor_Id);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetByProveedor" + " Parametros  Enviados en el Método: "+ "," + " s.Ver_Version_Id : " + s.Ver_Version_Id+ "," + " Com_Proveedor_Id : " + Com_Proveedor_Id  + " Nombre del Store Procedure: " + "dbo.Com_Proveedor_Contacto_ByProveedor " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Compras.Com_Proveedor_ContactoRow fila in tabla)
          lista.Add(new Com_Proveedor_Contacto(
          
    fila.Id,
    fila.Codigo,
    fila.Nombre,
    fila.Estado,
    fila.Com_Proveedor_Id,
    fila.Localidad,
    fila.Puesto,
    fila.Direccion,
    fila.Telefonos,
    fila.Fax,
    fila.Correo,
    fila.Descripcion,
    fila.Com_Proveedor_Codigo,
    fila.Par_Razon_Social_Id,
    fila.Par_Razon_Social_Nombre,
    fila.Par_Razon_Social_Numero,
    fila.Par_Razon_Social_Nombre_Comercial,
    fila.Par_Tipo_Identificacion_Id,
    fila.Par_Tipo_Identificacion_Codigo,
    fila.Par_Tipo_Identificacion_Nombre,
    fila.Int_Sucursal_Id,
    fila.Int_Sucursal_Codigo,
    fila.Int_Sucursal_Nombre,
    fila.Creacion_Per_Personal_Id,
    fila.Creacion_Per_Personal_Codigo,
    fila.Creacion_Per_Personal_Nombre,
    fila.Update_Per_Personal_Id,
    fila.Update_Per_Personal_Codigo,
    fila.Update_Per_Personal_Nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
          public List<Com_Proveedor_Contacto> GetByLikeLocalidad(Scope s, string Localidad)
          {
          string llamada = "";
          List <Com_Proveedor_Contacto> lista= new List <Com_Proveedor_Contacto> ();
          //Extrae los datos
          if(s != null)
          {
          Compras.Com_Proveedor_ContactoDataTable tabla = 
          Adapter.GetByLikeLocalidad(s.Ver_Version_Id, Localidad);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetByLikeLocalidad" + " Parametros  Enviados en el Método: "+ "," + " s.Ver_Version_Id : " + s.Ver_Version_Id+ "," + " Localidad : " + Localidad  + " Nombre del Store Procedure: " + "dbo.Com_Proveedor_Contacto_ByLikeLocalidad " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Compras.Com_Proveedor_ContactoRow fila in tabla)
          lista.Add(new Com_Proveedor_Contacto(
          
    fila.Id,
    fila.Codigo,
    fila.Nombre,
    fila.Estado,
    fila.Com_Proveedor_Id,
    fila.Localidad,
    fila.Puesto,
    fila.Direccion,
    fila.Telefonos,
    fila.Fax,
    fila.Correo,
    fila.Descripcion,
    fila.Com_Proveedor_Codigo,
    fila.Par_Razon_Social_Id,
    fila.Par_Razon_Social_Nombre,
    fila.Par_Razon_Social_Numero,
    fila.Par_Razon_Social_Nombre_Comercial,
    fila.Par_Tipo_Identificacion_Id,
    fila.Par_Tipo_Identificacion_Codigo,
    fila.Par_Tipo_Identificacion_Nombre,
    fila.Int_Sucursal_Id,
    fila.Int_Sucursal_Codigo,
    fila.Int_Sucursal_Nombre,
    fila.Creacion_Per_Personal_Id,
    fila.Creacion_Per_Personal_Codigo,
    fila.Creacion_Per_Personal_Nombre,
    fila.Update_Per_Personal_Id,
    fila.Update_Per_Personal_Codigo,
    fila.Update_Per_Personal_Nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
          public List<Com_Proveedor_Contacto> GetByLikeNombre(Scope s, string Nombre)
          {
          string llamada = "";
          List <Com_Proveedor_Contacto> lista= new List <Com_Proveedor_Contacto> ();
          //Extrae los datos
          if(s != null)
          {
          Compras.Com_Proveedor_ContactoDataTable tabla = 
          Adapter.GetByLikeNombre(s.Ver_Version_Id, Nombre);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetByLikeNombre" + " Parametros  Enviados en el Método: "+ "," + " s.Ver_Version_Id : " + s.Ver_Version_Id+ "," + " Nombre : " + Nombre  + " Nombre del Store Procedure: " + "dbo.Com_Proveedor_Contacto_ByLikeNombre " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Compras.Com_Proveedor_ContactoRow fila in tabla)
          lista.Add(new Com_Proveedor_Contacto(
          
    fila.Id,
    fila.Codigo,
    fila.Nombre,
    fila.Estado,
    fila.Com_Proveedor_Id,
    fila.Localidad,
    fila.Puesto,
    fila.Direccion,
    fila.Telefonos,
    fila.Fax,
    fila.Correo,
    fila.Descripcion,
    fila.Com_Proveedor_Codigo,
    fila.Par_Razon_Social_Id,
    fila.Par_Razon_Social_Nombre,
    fila.Par_Razon_Social_Numero,
    fila.Par_Razon_Social_Nombre_Comercial,
    fila.Par_Tipo_Identificacion_Id,
    fila.Par_Tipo_Identificacion_Codigo,
    fila.Par_Tipo_Identificacion_Nombre,
    fila.Int_Sucursal_Id,
    fila.Int_Sucursal_Codigo,
    fila.Int_Sucursal_Nombre,
    fila.Creacion_Per_Personal_Id,
    fila.Creacion_Per_Personal_Codigo,
    fila.Creacion_Per_Personal_Nombre,
    fila.Update_Per_Personal_Id,
    fila.Update_Per_Personal_Codigo,
    fila.Update_Per_Personal_Nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
          #endregion
    #region Operaciones con datos
    
    //Inserta
    /// <summary>
    /// Inserta el objeto en la tabla Com_Proveedor_Contacto
    /// </summary>
    /// <param name="s">Variables de ámbito como la versión y la sucursal</param>
    // <returns></returns>
    public string Insert(Scope s, Com_Proveedor_Contacto o)
    {
    // Genera un nuevo Id, codigo y estado.
    o.GenNewId(s.Int_Sucursal_Numero);
    o.GenCodigo(s.Ver_Version_Id);
    o.GenEstado();
    // Controla el error de clave primaria duplicada.
    o.Int_Sucursal_Id = s.Int_Sucursal_Id;
    o.Creacion_Per_Personal_Id = s.Per_Personal_Id;
    o.Update_Per_Personal_Id = s.Per_Personal_Id;
    try
    {
    Adapter.Insert(
    
          o.Id,
          o.Codigo,
          o.Estado,
          o.Com_Proveedor_Id,
          o.Localidad,
          o.Nombre,
          o.Puesto,
          o.Direccion,
          o.Telefonos,
          o.Fax,
          o.Correo,
          o.Descripcion
    );
    }
    catch (SqlException e)
    {
        Exception eCaso;
        Exception otroEX;

    switch (e.Number)
    {
    // Si el error es de violación PK, entonces repite.
    case 2627:
    string mensaje = e.Errors[0].Message;
    if (mensaje.StartsWith(
    Textos._ERR_VIOLATION_UNIQUE_KEY)
    )
    return Insert(s, o);
    else
    {
        if (e.Message.Contains(TXT_BDD._IX_Com_Proveedor_Contacto_Codigo))
        {
            eCaso = new Exception("");
            otroEX = new Exception(TXT_Mensajes._MSJ32, eCaso);
            throw (otroEX);
        }
        eCaso = new Exception(e.Message);
        otroEX = new Exception(TXT_Mensajes._MSJ34, eCaso);
        throw (otroEX);
    }
    break;
        default:
            eCaso = new Exception(e.Message);
            otroEX = new Exception(TXT_Mensajes._MSJ34, eCaso);
            throw (otroEX);
    }
    }
    //Control de Auditoria
    Auditar.Registro(s, o, Textos._AUDITAR_ACCION_INSERT);
    //Retorna el Id Insetado
     return o.Id;
    }
    // Borra
    /// <summary>
    /// Borra el objeto de la tabla Com_Proveedor_Contacto
    ///</summary>
     /// <param name="o">Objeto a actualizar</param>
    /// <returns></returns>
    public int Delete(Scope s,  Com_Proveedor_Contacto o)
    {
        int resultado = 0;
        try{
        resultado = Adapter.Delete(

               o.Id,
               o.Codigo,
               o.Estado,
               o.Com_Proveedor_Id,
               o.Localidad,
               o.Nombre,
               o.Puesto,
               o.Direccion,
               o.Telefonos,
               o.Fax,
               o.Correo,
               o.Descripcion
         );
    }
    catch (SqlException e)
    {
        Exception eCaso;
        Exception otroEX;

        eCaso = new Exception(e.Message);
        otroEX = new Exception(TXT_Mensajes._MSJ34, eCaso);
        throw (otroEX);
    }
    Auditar.Registro(s, o, Textos._AUDITAR_ACCION_DELETE);
    return resultado;
    }//Actualiza
    /// <summary>
    //Actualiza la tabla Com_Proveedor_Contacto
    /// </summary>
    /// <param name="o">Objeto que contiene la información a actualizar</param>
    /// <param name="original">Original para concurrencia optimista</param> 
    /// <returns></returns>
    public int Update(Scope s, Com_Proveedor_Contacto o, Com_Proveedor_Contacto original)
    {
    int resultado=0;
    o.Update_Per_Personal_Id = s.Per_Personal_Id;
    try
    {
        resultado = Adapter.Update(

              o.Id,
              o.Codigo,
              o.Estado,
              o.Com_Proveedor_Id,
              o.Localidad,
              o.Nombre,
              o.Puesto,
              o.Direccion,
              o.Telefonos,
              o.Fax,
              o.Correo,
              o.Descripcion,
              original.Id,
              original.Codigo,
              original.Estado,
              original.Com_Proveedor_Id,
              original.Localidad,
              original.Nombre,
              original.Puesto,
              original.Direccion,
              original.Telefonos,
              original.Fax,
              original.Correo,
              original.Descripcion

        );
    }
    catch (SqlException e)
    {
        Exception eCaso;
        Exception otroEX;
        if (e.Message.Contains(TXT_BDD._IX_Com_Proveedor_Contacto_Codigo))
        {
            eCaso = new Exception("");
            otroEX = new Exception(TXT_Mensajes._MSJ32, eCaso);
            throw (otroEX);
        }
        eCaso = new Exception(e.Message);
        otroEX = new Exception(TXT_Mensajes._MSJ34, eCaso);
        throw (otroEX);
    }
    Auditar.Registro(s, o, Textos._AUDITAR_ACCION_UPDATE);
    return resultado;
    }
    #endregion
    }
    }
